import axios from 'axios';
import ConfigStorage from '@/utils/configStorage';

const API_BASE_URL = 'https://xy178.top:9090/api/v2/tables/m122muudbmnsl5b/records';
const API_KEY = 'x8aFVTIu1THQJQk3esGibLRI9aDi1BMZgbIMgyEB';

// 创建 axios 实例
const api = axios.create({
  baseURL: API_BASE_URL,
  headers: {
    'xc-token': API_KEY,
    'Content-Type': 'application/json'
  }
});

export class ConfigSyncService {
  constructor() {
    this.configStorage = new ConfigStorage();
    this.lastSyncHash = null;
  }

  // 计算配置的哈希值，用于检测变化
  calculateConfigHash(configs) {
    return JSON.stringify(configs);
  }

  // 获取当前时间格式化字符串
  getCurrentTime() {
    const now = new Date();
    // 减去 8 小时
    now.setHours(now.getHours() - 8);
    
    return now.toLocaleString('zh-CN', {
      year: 'numeric',
      month: '2-digit',
      day: '2-digit',
      hour: '2-digit',
      minute: '2-digit',
      second: '2-digit',
      hour12: false
    }).replace(/\//g, '-');
  }

  // 同步上传配置
  async uploadConfigurations() {
    try {
      const localConfigs = this.configStorage.getConfigurations();
      const currentHash = this.calculateConfigHash(localConfigs);

      // 如果配置没有变化，跳过同步
      if (currentHash === this.lastSyncHash) {
        return;
      }
      
      // 遍历本地配置，逐个同步
      for (const config of localConfigs) {
        try {
          // 先查询是否存在该配置
          const response = await api.get(`?where=(title,eq,${config.name})`);
          const existingConfigs = response.data?.list || [];

          const payload = {
            title: config.name,
            content: JSON.stringify(config),
            createTime: this.getCurrentTime()
          };

          if (existingConfigs.length > 0) {
            // 存在配置时，添加 Id 字段
            payload.Id = existingConfigs[0].Id;
            // 使用 patch 更新
            await api.patch('', payload);
          } else {
            // 不存在配置，使用 post 创建
            await api.post('', payload);
          }
        } catch (error) {
          console.error(`上传配置 "${config.name}" 失败：`, error);
          throw error;
        }
      }

      this.lastSyncHash = currentHash;
      return true;
    } catch (error) {
      console.error('上传配置失败：', error);
      throw error;
    }
  }

  // 同步下载配置
  async downloadConfigurations() {
    try {
      // 获取所有远程配置
      const response = await api.get();
      const remoteConfigs = response.data?.list || [];
      
      if (remoteConfigs.length > 0) {
        // 将所有远程配置转换为本地格式
        const configs = remoteConfigs.map(rc => {
          try {
            // 检查 content 是否已经是对象
            return typeof rc.content === 'object' ? rc.content : JSON.parse(rc.content);
          } catch (error) {
            console.error(`解析配置失败：${rc.title}`, error);
            return null;
          }
        }).filter(Boolean); // 过滤掉解析失败的配置
        
        if (configs.length === 0) {
          return false;
        }

        // 确保配置按 ID 排序，保证 ID 为 1 的配置在最前面
        configs.sort((a, b) => parseInt(a.id) - parseInt(b.id));
        
        this.configStorage.setConfigurations(configs);
        return true;
      }
      return false;
    } catch (error) {
      console.error('下载配置失败：', error);
      throw error;
    }
  }
} 